package com.xyazm;

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.builder.GeneratorBuilder;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler;

/**
 * <p>
 * 代码生成器演示
 * </p>
 */
public class CodeGenerator {

	public static String model = "address";
	/**
	 * 修改生成配置
	 */
	public static String dbUrl = "jdbc:mysql://localhost:3306/mall-"+model+"?serverTimezone=UTC&useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8";

	public static String dbName = "root";

	public static String dbPassword = "root";

	//生成路径
	public static String parentpackage = "com.xyazm";



	/**
	 * <p>
	 * MySQL 生成演示
	 * </p>
	 */
	public static void main(String[] args) {

		// 全局策略配置
		GlobalConfig globalConfig = GeneratorBuilder.globalConfigBuilder()
				// 覆盖已生成文件
				.fileOverride()
				// 生成后是否打开生成目录
				.openDir(true)
				// 指定输出目录 默认值: windows:D:// linux or mac : /tmp
				.outputDir("E:\\xyazm-mall\\template")
				// 生成swagger注解
				.enableSwagger()
				// 作者名
				.author("xuyou")
				// 时间策略
				.dateType(DateType.TIME_PACK)
				// 注释日期格式
				.commentDate("yyyy-MM-dd")
				.build();




		// 数据源配置
		DataSourceConfig dataSourceConfig = new DataSourceConfig
				// 驱动连接的URL、数据库连接用户名、数据库连接密码
				.Builder(dbUrl, dbName, dbPassword)
				// 类型转换,数据库=》JAVA类型
				.typeConvert(new MySqlTypeConvert())
				// 关键字处理 ,这里选取了mysql5.7文档中的关键字和保留字（含移除）
				.keyWordsHandler(new MySqlKeyWordsHandler())
				// 数据库信息查询类,默认由 dbType 类型决定选择对应数据库内置实现
				.dbQuery(new MySqlQuery())
				// 数据库 schema name
				//.schema("mall-coupon")
				.build();


		// 包配置
		PackageConfig packageConfig = new PackageConfig.Builder()
				// 父包名。如果为空，将下面子包名必须写全部， 否则就只需写子包名
				.parent(parentpackage)
				// 父包模块名
				.moduleName(model)
				.build();

		StrategyConfig strategy = new StrategyConfig
				.Builder()
				.entityBuilder()
				.enableLombok()
				.columnNaming(NamingStrategy.underline_to_camel)
				.naming(NamingStrategy.underline_to_camel)
				.build();


		// 策略配置
		/*StrategyConfig strategy = new StrategyConfig();
		strategy.setNaming(NamingStrategy.underline_to_camel);
		strategy.setColumnNaming(NamingStrategy.underline_to_camel);
		strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");
		strategy.setEntityLombokModel(true);
		strategy.setRestControllerStyle(true);*/


		// 配置模板
		TemplateConfig templateConfig = new TemplateConfig
				.Builder()
				.controller("/template/controller.java")
				.entity("/template/entity.java")
				.mapperXml("/template/mapper.xml")
				.build();//激活所有默认模板
		// 添加以上配置到AutoGenerator中
		AutoGenerator autoGenerator = new AutoGenerator(dataSourceConfig); // 数据源配置
		autoGenerator.global(globalConfig); // 全局策略配置
		autoGenerator.packageInfo(packageConfig);    // 包配置
		autoGenerator.template(templateConfig); // 配置模板
		autoGenerator.strategy(strategy); // 配置策略
		// 生成代码
		autoGenerator.execute(new FreemarkerTemplateEngine());

	}

}
